package org.wheel.module.core.config.cookie;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Set;

/**
 * Cookie 配置
 * <pre>
 * | maxAge 配置值 | 实际行为                       |
 * | ------------- | ------------------------------ |
 * | `-1`（默认）  | session cookie，关浏览器即失效 |
 * | `0`           | 永不过期（或 10 年）           |
 * | `>0`          | 指定秒数                       |
 *
 * </pre>
 */
@ConfigurationProperties(prefix = "system.default.cookie")
public class CookieProperties {

    /**
     * 允许使用的域名列表，支持多个。
     * 生产环境必须配置，开发环境可为空（代表不限制）
     */
    private Set<String> domain = Set.of();

    /**
     * 是否强制 secure=true（默认 true，仅当 prod 且 https 时生效）
     */
    private boolean secure = true;

    /**
     * 是否强制 httpOnly=true（默认 true，仅当 prod 时生效）
     */
    private boolean httpOnly = true;
    /**
     * Cookie 有效期
     *  - -1 : session cookie（浏览器关闭失效）
     *  -  0 : 永不过期（不写 Max-Age）
     *  >0 : 指定秒数
     */
    private int maxAge = -1;   // 默认随 session

    /* --- getter/setter --- */
    public Set<String> getDomain() { return domain; }
    public void setDomain(Set<String> domain) { this.domain = domain; }
    public boolean isSecure() { return secure; }
    public void setSecure(boolean secure) { this.secure = secure; }
    public boolean isHttpOnly() { return httpOnly; }
    public void setHttpOnly(boolean httpOnly) { this.httpOnly = httpOnly; }
    public int getMaxAge() { return maxAge; }
    public void setMaxAge(int maxAge) { this.maxAge = maxAge; }
}
